let array = [0, 1, 2, 3, 4];

/**
 *
 * @param {any[]} arr 需要被操作的数组
 * @param {*} times
 * @returns
 */
const rollTimes = (arr = [], times = 1) => {
  // 异常参数处理
  if (!Array.isArray(arr)) {
    console.error(
      "rollTimes(any[], number) 入参错误！ 应该是 array 类型，但是收到一个",
      typeof arr,
      "类型。"
    );
    return;
  }

  // 深拷贝数据，避免对源数据造成影响
  let result = JSON.parse(JSON.stringify(arr));

  /* 如果滚动次数为0，返回源数据的拷贝体，即本方法可以实现单层数据的深拷贝 */
  if (times === 0) {
    result = result;
    /* 如果滚动次数小于0，则向左滚动，即第1个变成最后一个，其他依次向左移动一个 */
  } else if (times < 0) {
    for (let i = 0; i > times; i--) {
      result.push(result.shift());
    }
    /* 如果滚动次数大于0，则向右滚动，即最后一个变成第一个，其他依次向左移动一个 */
  } else {
    for (let i = 0; i < times; i++) {
      result.unshift(result.pop());
    }
  }

  return result;
};

console.log(rollTimes(123));

console.log(rollTimes(array, 1));
// [ 4, 0, 1, 2, 3 ]

console.log(rollTimes(array, -1));
//[ 1, 2, 3, 4, 0 ]
